#include "myitem.h"



MyItem::MyItem()
{
    //设置捕获鼠标悬停消息事件：
    this->setAcceptHoverEvents(true);

    //设置    图形视图       属性：
    this->setFlag(QGraphicsItem::ItemIsFocusable);      //能不能接受焦点
    this->setFlag(QGraphicsItem::ItemIsMovable);          //能不能移动
            //写完这些，就能用鼠标拖拽图形进行移动了；

}

//返回要绘制的图形项的矩形区域：   定义的边界，所有的图形都必须在这个矩形区域里面
QRectF MyItem::boundingRect() const
{
    return QRectF(0,0,40,40);
}

//用于绘图的函数：
void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->setBrush(Qt::red);
    painter->drawRect(0,0,40,40);
}

//鼠标按下事件：
void MyItem::mousePressEvent(QGraphicsSceneMouseEvent *ev)
{
    //设置焦点：
    this->setFocus();

    //设置光标
    this->setCursor(Qt::ClosedHandCursor);


}

//鼠标松开事件：
void MyItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *ev)
{
    this->setCursor(Qt::OpenHandCursor);
}

//键盘按下：
void MyItem::keyPressEvent(QKeyEvent *ev)
{
    //图形项的移动：
    if(ev->key() == Qt::Key_Down)
    {
        moveBy(0,10);
    }
    else if(ev->key() == Qt::Key_Up)
    {
        moveBy(0,-10);
    }

}

//鼠标悬停事件：
void MyItem::hoverEnterEvent(QGraphicsSceneHoverEvent *ev)
{
    //设置光标：     鼠标悬停在图形顶层上后，设置鼠标图标：       在可用之前   要在构造函数中写出鼠标悬停捕获事件函数
    this->setCursor(Qt::OpenHandCursor);            //Qt::OpenHandCursor —— 设置成开抓手的图标，当前也有闭抓手的图标了

    //提示信息：
    this->setToolTip("提示信息：qt_Grapical_item");

}

//右键菜单：
void MyItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *ev)
{
    QMenu menu;
    QAction* moveAction = menu.addAction("复原");
    QAction* selection = menu.exec(ev->screenPos());

    if(moveAction == selection)
    {
        this->setPos(0,0);
    }

}
